home *** CD-ROM | disk | FTP | other *** search
/ Delphi Informant Complete 1995 - 2000 / Delphi Informant Complete 1995 to 2000.iso / Delphi Informant Magazine Complete Works SOURCE CODE 1998.rar / 1998 / Sep / di9809am / Compont / Sample1 / TapiForm.pas < prev    next >
Pascal/Delphi Source File  |  1998-06-29  |  10KB  |  341 lines

  1. { This project accompanies the article written by Alan Moore
  2.   and Ken Kyler on TAPI basics }
  3.  
  4. unit TapiForm;
  5.  
  6. interface
  7.  
  8. uses
  9.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  10.   StdCtrls, ExtCtrls, Mask, ComCtrls, Tapi, TAPIComp;
  11.  
  12. type
  13.   TTapiCallManager = class(TForm)
  14.     PanelTop: TPanel;
  15.     Label1: TLabel;
  16.     ePhoneNum: TMaskEdit;
  17.     btnDial: TButton;
  18.     btnHangup: TButton;
  19.     cboxDevices: TComboBox;
  20.     cbLineMapper: TCheckBox;
  21.     Memo: TMemo;
  22.     StatusBar: TPanel;
  23.     ImageList: TImageList;
  24.     cboxMediaMode: TComboBox;
  25.     cboxBearerMode: TComboBox;
  26.     Panel1: TPanel;
  27.     RI: TImage;
  28.     CD: TImage;
  29.     RD: TImage;
  30.     DSR: TImage;
  31.     DTR: TImage;
  32.     CTS: TImage;
  33.     Label2: TLabel;
  34.     Label3: TLabel;
  35.     Label4: TLabel;
  36.     Label5: TLabel;
  37.     Label6: TLabel;
  38.     Label7: TLabel;
  39.     Port: TImage;
  40.     Label8: TLabel;
  41.     btnDialingProperties: TButton;
  42.     cbPulseDialing: TCheckBox;
  43.     cboxAcceptCalls: TCheckBox;
  44.     kkamTAPI1: TkkamTAPI;
  45.     procedure btnDialClick(Sender: TObject);
  46.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  47.     procedure FormCreate(Sender: TObject);
  48.     procedure btnHangupClick(Sender: TObject);
  49.     procedure cboxDevicesChange(Sender: TObject);
  50.     procedure cbLineMapperClick(Sender: TObject);
  51.     procedure cboxMediaModeChange(Sender: TObject);
  52.     procedure cboxBearerModeChange(Sender: TObject);
  53.     procedure btnDialingPropertiesClick(Sender: TObject);
  54.     procedure FormDestroy(Sender: TObject);
  55. //    procedure cboxAcceptCallsClick(Sender: TObject);
  56.     procedure btnAnswerCallClick(Sender: TObject);
  57.     procedure kkamTAPI1EnumerateDevices(sender: TObject;
  58.       UpdateList: TStringList);
  59.     procedure kkamTAPI1OpenLine(sender: TObject; UpdateList: TStringList);
  60.     procedure kkamTAPI1TriggerCommEvent(sender: TObject;
  61.       ACommEvent: TCommEvent; AStatus: Integer);
  62.     procedure kkamTAPI1CreateCallManager(sender: TObject;
  63.       UpdateList: TStringList);
  64.     procedure kkamTAPI1DestroyCallManager(sender: TObject;
  65.       UpdateList: TStringList);
  66.     procedure kkamTAPI1ShutdownManager(sender: TObject;
  67.       UpdateList: TStringList);
  68.     procedure kkamTAPI1Dial(sender: TObject; UpdateList: TStringList);
  69.     procedure cbPulseDialingClick(Sender: TObject);
  70.   //  procedure kkamTAPI1CommThreadEvent(sender: TObject;
  71.   //    ThreadAction: TThreadAction);
  72.  public
  73.     //CommStatusThread: TCommStatus;
  74.     procedure SetBitmap(Image: TImage; Index: integer);
  75.  private
  76.     { Private declarations }
  77.     procedure PhoneNumChange;
  78.     procedure SetModemLights;
  79.     { Public declarations }
  80.   end;
  81.  
  82. var
  83.    TapiCallManager : TTapiCallManager;
  84.  
  85. const
  86.   Ver = $00010004;  // API version accepted (1.4) [Windows 95]
  87.   off = 0;
  88.   red = 1;
  89.   yellow = 2;
  90.   green = 3;
  91.  
  92. implementation
  93.  
  94. {$R *.DFM}
  95.  
  96. procedure TTapiCallManager.SetModemLights;
  97. var
  98.   S : string;
  99. begin
  100.   // load the ImageList
  101.   S := ExtractFilePath(Application.exename);
  102.   with ImageList do begin
  103.      FileLoad(rtBitMap, S + 'LEDOff.bmp', clNone);      // 0
  104.      FileLoad(rtBitMap, S + 'LEDRedOn.bmp', clNone);    // 1
  105.      FileLoad(rtBitMap, S + 'LEDYellowOn.bmp', clNone); // 2
  106.      FileLoad(rtBitMap, S + 'LEDGreenOn.bmp', clNone);  // 3
  107.   end;
  108.   with ImageList do begin
  109.      GetBitMap(off, RI.Picture.Bitmap);
  110.      GetBitMap(off, CD.Picture.Bitmap);
  111.      GetBitMap(off, RD.Picture.Bitmap);
  112.      GetBitMap(off, DSR.Picture.Bitmap);
  113.      GetBitMap(off, DTR.Picture.Bitmap);
  114.      GetBitMap(off, CTS.Picture.Bitmap);
  115.      GetBitMap(off, Port.Picture.Bitmap);
  116.   end;
  117. end;
  118.  
  119. procedure TTapiCallManager.btnDialClick(Sender: TObject);
  120. var
  121.   DialResult: string;
  122. begin
  123.   if not kkamTAPI1.AutoSelectLine  and (kkamTAPI1.Dev < 0) then begin
  124.          // a device wasn't selected
  125.      ShowMessage('You must first select a Line device!');
  126.      Exit;
  127.   end;
  128.   DialResult := kkamTAPI1.Dial;
  129.   if DialResult='Success' then
  130.     begin
  131.       btnDial.Enabled := false;  // disable the dial button
  132.       btnHangup.Enabled := true; // and enable the hangup button
  133.       Memo.Lines.Add(DialResult);
  134.      end
  135.   else
  136.     ShowMessage(DialResult);
  137. end;
  138.  
  139. procedure TTapiCallManager.FormCloseQuery(Sender: TObject;
  140.                             var CanClose: Boolean);
  141. var
  142.   TempStringList : TStringList;
  143. begin
  144.   TempStringList := TStringList.Create;
  145.   TempStringList.Clear;
  146.   // if the custom call manager was used, make sure to free resources
  147.   if kkamTAPI1.CheckLineIsOpen then
  148.      CanClose := kkamTAPI1.ShutdownManager;
  149.   // Update Memo
  150.   Memo.Lines.Assign(TStrings(TempStringList));
  151.   TempStringList.Free;
  152. end;
  153.  
  154. procedure TTapiCallManager.FormCreate(Sender: TObject);
  155. var
  156.   S : string;
  157.   TempStringList : TStringList;
  158. begin
  159.   kkamTAPI1.ChangePhoneNumber(ePhoneNum.Text);
  160.   TempStringList := TStringList.Create;
  161.   btnHangup.Enabled := false; // disable the hangup button
  162.   ImageList := TImageList.Create(Application);
  163.   SetModemLights;
  164.   cboxMediaMode.ItemIndex := 3; // default to LINEMEDIAMODE_DATAMODEM
  165.   cboxBearerMode.ItemIndex := 0; // default to LINEBEARERMODE_VOICE
  166.  
  167.   if not kkamTAPI1.TapiInitialize then
  168.      // if we can't initialize, close
  169.      begin
  170.      //TAPI_Initialized := False;  // So we don't free stuff twice
  171.      ShowMessage('Could not initialize TAPI -- closing window');
  172.      Memo.Lines.Assign(TStrings(TempStringList));
  173.      Memo.Invalidate;
  174.      kkamTAPI1.Free;
  175.      TempStringList.Free;
  176.      Close;
  177.      end
  178.   else
  179.     begin
  180.     if kkamTAPI1.OpenLine(False, S) then
  181.     begin
  182.       SetBitMap(TapiCallManager.Port, green);
  183.       ImageList.GetBitMap(green,
  184.       Port.Picture.Bitmap);
  185.     end;
  186.       Memo.Lines.AddStrings(TStrings(TempStringList));
  187.         // fill the combobox with the available devices
  188.       TempStringList.Clear;
  189.       kkamTAPI1.EnumerateDevices;
  190.       cboxDevices.Items.AddStrings(TStrings(TempStringList));
  191.       TempStringList.Free;
  192.     end;
  193.     StatusBar.Caption := cboxDevices.Text;
  194. end;
  195.  
  196. procedure TTapiCallManager.FormDestroy(Sender: TObject);
  197. begin
  198. //  if ImageList<> Nil then
  199. //    ImageList.Free;
  200. end;
  201.  
  202. procedure TTapiCallManager.btnHangupClick(Sender: TObject);
  203. var
  204.   TempStringList : TStringList;
  205. begin
  206.   TempStringList := TStringList.Create;
  207.   if not kkamTAPI1.ShutdownManager then
  208.     begin
  209.       Memo.Lines.Assign(TStrings(TempStringList));
  210.       Memo.Invalidate;
  211.       TempStringList.Free;
  212.       Exit;
  213.     end
  214.   else
  215.     begin
  216.       Memo.Lines.Assign(TStrings(TempStringList));
  217.       Memo.Invalidate;
  218.       TempStringList.Free;
  219.       btnHangup.Enabled := false;   // disable the hangup button
  220.       btnDial.Enabled := true;      // enable the dial button
  221.     end;
  222. end;
  223.  
  224. procedure TTapiCallManager.SetBitmap(Image: TImage; Index: integer);
  225. var
  226.   Bmp: TBitMap;
  227. begin
  228.   Bmp := TBitMap.Create;
  229.   try
  230.      ImageList.GetBitMap(Index, Bmp);
  231.      Image.Picture.Bitmap := Bmp;
  232.   finally
  233.     Bmp.Free;
  234.   end;
  235. end;
  236.  
  237.  
  238. procedure TTapiCallManager.cboxDevicesChange(Sender: TObject);
  239. begin
  240.   kkamTAPI1.Dev := cboxDevices.ItemIndex;
  241. end;
  242.  
  243. procedure TTapiCallManager.cbLineMapperClick(Sender: TObject);
  244. begin
  245.   if cbLineMapper.Checked then
  246.      kkamTAPI1.AutoSelectLine := True else
  247.      kkamTAPI1.AutoSelectLine := False;
  248.   cboxDevices.Enabled := not kkamTAPI1.AutoSelectLine;
  249.   if kkamTAPI1.AutoSelectLine then
  250.      kkamTAPI1.Dev := 0
  251.   else
  252.      kkamTAPI1.Dev := cboxDevices.ItemIndex;
  253. end;
  254.  
  255. procedure TTapiCallManager.PhoneNumChange;
  256. begin
  257.   kkamTAPI1.PhoneNumber := ePhoneNum.Text;
  258. end;
  259.  
  260. procedure TTapiCallManager.cboxMediaModeChange(Sender: TObject);
  261. begin
  262.   kkamTAPI1.ChangeMediaMode(cboxMediaMode.ItemIndex);
  263. end;
  264.  
  265. procedure TTapiCallManager.cboxBearerModeChange(Sender: TObject);
  266. begin
  267.   kkamTAPI1.ChangeBearerMode(cboxBearerMode.ItemIndex);
  268. end;
  269.  
  270. procedure TTapiCallManager.btnDialingPropertiesClick(Sender: TObject);
  271. begin
  272.   kkamTAPI1.ShowLineTranslateDialog(ePhoneNum.Text, Application.Handle);
  273. end;
  274.  
  275. procedure TTapiCallManager.btnAnswerCallClick(Sender: TObject);
  276. begin
  277.   kkamTAPI1.AnswerCalls := True;
  278. end;
  279.  
  280. procedu